/*
 * Date：10/23/18 10:15 PM
 * Author: guomw
 *
 */

package com.treasure.mall.biz.service.core.auth;


import com.treasure.mall.biz.entity.auth.SystemManager;
import com.treasure.mall.biz.entity.auth.SystemMenu;
import com.treasure.mall.biz.entity.auth.SystemRole;
import com.treasure.mall.zbq.common.base.TwoTuple;
import org.springframework.security.core.userdetails.UserDetailsService;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 系统接口
 *
 * @author guomw
 * @date 2018/9/14
 */
public interface SystemService extends UserDetailsService {

    /**
     * 获取当前用户的菜单权限
     *
     * @param userId 用户ID
     * @return 菜单列表
     */
    List<SystemMenu> findByUserId(Integer userId);

    /**
     * 更新菜单启用状态
     *
     * @param itemCode
     * @return
     */
    boolean updateEnableByItemCode(Integer itemCode);

    /**
     * 根据code，获取菜单信息
     *
     * @param itemCode 菜单code
     * @return 菜单实体
     */
    SystemMenu findByItemCode(Integer itemCode);

    /**
     * 保存菜单信息
     *
     * @param systemMenu 菜单实体信息
     * @return true or false
     */
    SystemMenu save(SystemMenu systemMenu);

    /**
     * 根据code删除指定菜单
     *
     * @param itemCode 菜单code
     * @return boolean
     * @author guomw
     * @date 2018/9/17 13:41
     **/
    boolean deleteByItemCode(Integer itemCode);

    /**
     * 获取用户角色列表
     *
     * @param userId 用户ID
     * @return
     * @author guomw
     * @date 2018/9/17 14:16
     **/
    List<SystemRole> findRoleByUserId(Integer userId);

    /**
     * 获取角色信息
     *
     * @param roleId 角色ID
     * @return
     * @author guomw
     * @date 2018/9/17 14:17
     **/
    SystemRole findRoleById(Integer roleId);

    /**
     * 更新角色
     *
     * @param role 角色数据实体
     * @return
     * @author guomw
     * @date 2018/9/17 14:09
     **/
    SystemRole saveRole(SystemRole role);

    /**
     * 删除角色
     *
     * @param roleId 角色ID
     * @param userId 用户id
     * @return
     * @author guomw
     * @date 2018/9/17 14:25
     **/
    boolean deleteRoleById(Integer roleId, Integer userId);


    /**
     * 更新角色启用状态
     *
     * @param roleId
     * @return
     */
    boolean updateEnableByRoleId(Integer roleId);

    /**
     * 保存系统账户
     *
     * @param manager
     * @return
     */
    SystemManager saveManager(SystemManager manager);

    /**
     * 根据用户ID，获取其添加的账户列表
     *
     * @param userId
     * @return
     */
    List<SystemManager> findByParentUserId(Integer userId);

    /**
     * 启用或禁用账户状态
     *
     * @param UserId
     * @return
     */
    boolean updateManagerEnableById(Integer UserId);

    /**
     * 获取管理员信息
     *
     * @param userId
     * @return
     */
    SystemManager findManagerById(Integer userId);

    /**
     * 根据账户名获取账户信息
     *
     * @param loginName
     * @return
     */
    SystemManager findManagerByLoginName(String loginName);


    /**
     * 获取cookie中的管理员Id号
     *
     * @param request
     * @return
     */
    Integer getCurrentRootId(HttpServletRequest request);


    /**
     * 修改密码
     *
     * @param userId
     * @param password
     */
    void modifyManagerPassword(Integer userId, String password);

    /**
     * 检查功能权限
     *
     * @param manager
     * @param path
     * @return
     */
    boolean checkFunction(SystemManager manager, String path);
}
